"""
普通用户账号初始化脚本
"""

import os
from dotenv import load_dotenv
from datetime import datetime, UTC
from sqlalchemy.orm import Session

from models.user import User, UserRole, UserStatus
from dao.postgresql_connect import SessionLocal
from utils import get_password_hash

def init_user(username=None, phone=None, password=None, country_code='+86'):
    """初始化普通用户账号
    
    Args:
        username: 用户名，如果为None则使用环境变量
        phone: 手机号，如果为None则使用环境变量
        password: 密码，如果为None则使用环境变量
        country_code: 国家区号，默认为+86（中国）
    """
    load_dotenv()
    
    # 使用参数或环境变量
    username = username or os.getenv('USER_USERNAME')
    phone = phone or os.getenv('USER_PHONE')
    password = password or os.getenv('USER_PASSWORD')
    country_code = country_code or os.getenv('USER_COUNTRY_CODE', '+86')
    
    # 检查必要的参数
    if not username or not phone or not password:
        raise ValueError("缺少必要的参数: 用户名、手机号和密码")
    
    db = SessionLocal()
    try:
        # 检查是否已存在相同用户名的账号
        existing_user = db.query(User).filter(User.username == username).first()
        if existing_user:
            print(f"用户名 {username} 已存在")
            return
        
        # 检查是否已存在相同手机号的账号
        existing_phone = db.query(User).filter(User.phone == phone).first()
        if existing_phone:
            print(f"手机号 {phone} 已存在")
            return
        
        # 创建普通用户账号
        user = User(
            username=username,
            phone=phone,
            country_code=country_code,
            password=get_password_hash(password),
            role=UserRole.USER,
            status=UserStatus.ACTIVE,
            created_at=datetime.now(UTC),
            updated_at=datetime.now(UTC)
        )
        db.add(user)
        db.commit()
        print(f"普通用户账号创建成功: {user.username}")
    except Exception as e:
        print(f"创建普通用户账号失败: {str(e)}")
        raise
    finally:
        db.close()

if __name__ == '__main__':
    init_user() 